package reflection;

import java.lang.reflect.Field;

/**
 * @Author Stringzhua
 * @Date 2024/11/5 10:38
 * description:通过反射给成员变量赋值
 */
public class Demo02 {
    public static void main(String[] args) throws InstantiationException, IllegalAccessException, NoSuchFieldException {
        // 获取类型信息
        Class cls = Person.class;
        // 获取所有成员变量
        //获取所有定义的成员变量(private\public)
         Field[] fields = cls.getDeclaredFields();
        //获取所有公共的成员变量(public)Field[l fields = cls.getFields();
        for (Field f : fields) {
            System.out.println(f);
        }

        //获取指定名称的成员变量
        Field nameField = cls.getDeclaredField("name");
        Field levelField = cls.getDeclaredField("level");
        // 将数据保存至成员变量
        // 以反射的方式创建对象
        Object obj = cls.newInstance();
        // public修饰的成员变量
        // 作用类似:p.level=4;
        levelField.setInt(obj, 4);
        //private修饰的成员变量
        // 作用类似:p.name ="秋香"
        nameField.setAccessible(true);//设置允许访问private修饰的成员变量
        nameField.set(obj, "秋香");
        System.out.println(obj);
    }
}

class Person {
    public int level;
    private String name;
}
